import fetcher from "./Fetcher";
import { ResponseType } from "@zxy-cn/fetcher";
import {Page} from "../utils/Page";

/**
 * 添加或更新组合商品的请求参数
 */
export interface AddOrUpdateCompositeGoodsRequest {
    name: string; // 组合商品名称
    price: number; // 组合商品价格
    note?: string; // 备注（可选）
    items: CompositeGoodsItemRequest[]; // 组合商品项列表
}

/**
 * 组合商品项请求参数
 */
export interface CompositeGoodsItemRequest {
    goodsId?: number; // 商品ID（可选，与subGoodsId二选一）
    subGoodsId?: number | null; // 子商品ID（可选，与goodsId二选一）
    amount: number; // 商品数量
}

/**
 * 添加组合商品
 * @param request 添加组合商品的请求参数
 * @returns 新创建的组合商品ID
 */
export function addCompositeGoods(request: AddOrUpdateCompositeGoodsRequest) {
    return fetcher.post<number>("compositeGoods", {}, request);
}

/**
 * 更新组合商品
 * @param id 要更新的组合商品ID
 * @param request 更新组合商品的请求参数
 * @returns 无内容响应
 */
export function updateCompositeGoods(
    id: number,
    request: AddOrUpdateCompositeGoodsRequest
) {
    return fetcher.put(`compositeGoods/${id}`, {}, request);
}

/**
 * 组合商品详情
 */
export interface CompositeGoodsDetail {
    id: number;
    name: string;
    price: number; // BigDecimal 转换为 number
    note?:string
    items: CompositeGoodsItem[];
}

/**
 * 组合商品中的商品项
 */
export interface CompositeGoodsItem {
    goodsId: number;
    subGoodsId?: number | null;
    amount: number;
    name: string;
    barcode:string
    subGoodsName?: string | null;
    subGoodsNumber?: string | null;
}

/**
 * 获取组合商品详情
 * @param id 组合商品ID
 * @returns 组合商品详情
 */
export function getCompositeGoodsDetail(id: number): Promise<CompositeGoodsDetail> {
    return fetcher.get<CompositeGoodsDetail>(`compositeGoods/${id}`)
        .then(response => response.data);
}

/**
 * 删除组合商品
 * @param id 要删除的组合商品ID
 * @returns 无内容响应
 */
export function deleteCompositeGoods(id: number) {
    return fetcher.delete(`compositeGoods/${id}`);
}

/**
 * 查询组合商品的请求参数
 */
export interface QueryCompositeGoodsRequest {
    name?: string; // 组合商品名称搜索关键词
    page?: number; // 页码
    size?: number; // 每页大小
}

/**
 * 组合商品简要信息响应
 */
export interface CompositeGoodsSummaryResponse {
    id: number; // 组合商品ID
    name: string; // 组合商品名称
    price: number; // 组合商品价格
    itemCount: number; // 包含的商品项数量
    createdDateTime: string; // 创建时间
}

/**
 * 查询组合商品列表
 * @param request 查询参数
 * @returns 组合商品分页列表
 */
export function queryCompositeGoods(request: QueryCompositeGoodsRequest) {
    return fetcher.get<Page<CompositeGoodsSummaryResponse>>("compositeGoods", request);
}

/**
 * 导出组合商品到Excel
 * @returns Excel文件Blob
 */
export function exportCompositeGoodsToExcel() {
    return fetcher.get<Blob>("compositeGoods/excel", {}, { responseType: ResponseType.BLOB });
}

/**
 * 从Excel导入组合商品
 * @param file Excel文件
 * @returns 导入成功的记录数
 */
export function importCompositeGoodsFromExcel(file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return fetcher.post<number>("compositeGoods/excel/import", {}, formData, {
        timeout: 30000
    });
}